import {
	BASEURL
} from "./config.js" //获取请求域名
// console.log(BASEURL)
const baseRequest = (url, method, data = {}, loading = true) => {
	const token = uni.getStorageSync("token")
	let header = {
		// "content-type":"application/x-www-form-urlencoded"
		"content-type": "application/json"
	}
	if (token) {
		header = {
			...header,
			...{
				'Authorization': "Bearer " + token
			}
		}
	}
	if (loading) {
		uni.showLoading({
			title: '加载中'
		})
	}
	return new Promise((reslove, reject) => {
		uni.request({
			url: BASEURL + url,
			method: method || 'GET',
			header: header,
			timeout: 800000,
			data: data || {},
			success: (successData) => {
				const res = successData.data
				//捕捉系统错误
				if (successData.statusCode == 200) {
					uni.hideLoading()
					console.log(res.status_code);
					switch (res.status_code) {
						case "200": // 需要登录
							break;
						case "401": // 需要登录
						console.log('请登录',res.status_code);

							uni.removeStorageSync('userInfo')
							uni.removeStorageSync('token')
							uni.showToast({
								title: '请先登录',
								duration: 1000,
								icon: 'none'
							})
							uni.redirectTo({
								url: '/pages/alogin/index'
							})
							break;
						case 410: // 需要设置密码
							console.log('密码设置',res.status_code);

							uni.showModal({
								title: '提示', // 标题
								showCancel:false,

								content: '请先设置基本信息', // 内容
								confirmText: "确定", // 确认按钮文字
								success(res) {
									if (res.confirm) {
										uni.redirectTo({
											url: '/pages/alogin/setUserInfo'
										})
										return false;
										// 这里写取消操作的相关代码
									} else if (res.cancel) {

										uni.redirectTo({
											url: '/pages/alogin/setUserInfo'
										})
										return false;

									}
								}
							});
							break;
						case "410": // 需要设置密码
							uni.showModal({
								title: '提示', // 标题
								showCancel:false,

								content: '请先设置基本信息', // 内容
								confirmText: "确定", // 确认按钮文字
								success(res) {
									if (res.confirm) {
										uni.redirectTo({
											url: '/pages/alogin/setUserInfo'
										})
										return false;
										// 这里写取消操作的相关代码
									} else if (res.cancel) {

										uni.redirectTo({
											url: '/pages/alogin/setUserInfo'
										})
										return false;

									}
								}
							})
							break;
						case 501: //未实名认证
							uni.showToast({
								title: '请先实名认证1',
								duration: 1000,
								icon: 'none'
							})
							uni.redirectTo({
								url: '/pages/my/person/Realname/index'
							})
							return
							break;
						case 502: //未企业认证
							uni.showToast({
								title: '请先企业认证',
								duration: 1000,
								icon: 'none'
							})
							uni.redirectTo({
								url: '/pages/my/person/Realname/index'
							})
							return
							break;
						case 422: //request 验证提示
							console.log('422错误提示', res.errors);
							$.each(res.errors, function(field, error) {
								console.log('422错误提示详细', error);
								// uni.showToast({
								// 	title: error[0],
								// 	icon: 'none',
								// 	duration: 1000,
								// })
								uni.showModal({
									title: '提示', // 标题
									showCancel:false,

									content: error[0], // 内容
									confirmText: "确定", // 确认按钮文字
									success(res) {
										if (res.confirm) {
											return false;
											// 这里写取消操作的相关代码
										} else if (res.cancel) {
											goSwitchTab('/pages/home/index');
										}
									}
								});
								return false;
							});
							break;
						default:
							uni.showModal({
								title: '提示', // 标题
								showCancel:false,
								content: res.message, // 内容
								confirmText: "确定", // 确认按钮文字
								success(res) {
									if (res.confirm) {
										return false;
										// 这里写取消操作的相关代码
									} else if (res.cancel) {
										goSwitchTab('/pages/home/index');
									}
								}
							});
							return
					}
					reslove(res.data)
				} else if (successData.statusCode == 422) {
					const errors = Object.values(successData.data.errors);
					console.log('422错误提示-对象', successData.data.errors);
					console.log('422错误提示-数组', errors);
					errors.forEach(function(item) {
						uni.showToast({
							title: item[0],
							icon: 'none',
							duration: 1000,
						})
						return;
					});
					// $.each(successData.errors, function (field, error) {
					// 	console.log('422错误提示详细',error);
					// 	uni.showToast({
					// 		title:error[0],
					// 		icon:'none',
					// 		duration:1000,
					// 	})
					// 	return false;
					// });
				} else {
					uni.showToast({
						title: '网络连接失败',
						icon: 'error',
						duration: 2000
					})
					return
				}
			},
			fail: (msg) => {
				uni.showToast({
					title: '网络连接失败',
					icon: 'error',
					duration: 2000
				})
				return;
			}
		})
	})
}
const request = {}
let arr = ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect']
arr.forEach((method) => {
	request[method] = (api, data, loading) => baseRequest(api, method, data, loading)
})
export default request
